home *** CD-ROM | disk | FTP | other *** search
/ Aminet 38 / Aminet 38 (2000)(Schatztruhe)[!][Aug 2000].iso / Aminet / dev / amos / SamplesMaster.lha / SamplesMaster.AMOS / SamplesMaster.amosSourceCode
Encoding:
AMOS Source Code  |  2000-05-20  |  47.4 KB  |  1,499 lines

  1. '-> SamplesMaster by Stefano Regattin  
  2. 'i> 7 luglio 1996
  3. 'm> 8,9,11,13,15,16,21,22,23,25,27,28,30 luglio 1996 
  4. 'm> 1,2,4,7,8,10,12,13,14,16,17,20,21,28,29 agosto 1996
  5. 'm> 4,12,13,17 ottobre 1996
  6. 'm> 1,11,13,14 novembre 1996 
  7. 'm> 20 febbraio 1997 
  8. 'm> 8 marzo 1997 
  9. 'm> 17 giugno 1997 
  10. 'm> 10 novembre 1997 
  11. 'm> 31 marzo 1998
  12. 'm> 3,4,5,8,9,11,20,25,26,27,29 aprile 1998
  13. 'm> 5,7,8,9,19,23 luglio 1998  
  14. 'm> 11 agosto 1998 
  15. 'm> 24 aprile 1999 
  16. 'm> 22,31 luglio 1999  
  17. 'm> 28 novembre 1999 
  18. 'm> 4 dicembre 1999
  19. 'm> 20 maggio 2000 
  20. '------------------  
  21. Set Buffer 40
  22. BANCO=65535
  23. BANCODIIO=65534
  24. BANCO3=65533
  25. BANCO4=65532
  26. Global ANNOTAZIONI$,FILE$,NOMEFILE$,ZONAATTIVA$
  27. Global ALTEZZA,ANOMALOIFF,BANCO,BANCODIIO,BANCO3,BANCO4,CICLO,FILTRO
  28. Global FINECAMPIONE,FREQUENZA,GENERACAMPIONE,INIZIO,INIZIOCAMPIONE
  29. Global LUNGHEZZACAMPIONE,NUOVAFINECAMPIONE,NUOVAFREQUENZA,NUOVOINIZIOCAMPIONE
  30. Global PASSO,POSIZIONEINGRANDIMENTO,POSIZIONESLIDER,RIDUZIONE,SENZAMEMORIA
  31. Global ULTIMALINEA,XLINEAFINECAMPIONE,XLINEAINIZIOCAMPIONE
  32. Global YSLIDERINGRANDIMENTO,ZERO
  33. Global DIVISIONESLIDERINGRANDIMENTO#
  34. Dim F0RMADONDA(8191)
  35. Global F0RMADONDA()
  36. Proc SETTASCHERMO
  37. Proc ARCOBALENO
  38. Reserve As Chip Work BANCO,512
  39. FILTRO=True
  40. FREQUENZA=8363
  41. Proc CONDIZIONEINIZIALE
  42. Repeat 
  43.  Repeat 
  44.   TASTODELTOPOPREMUTO=Mouse Key
  45.   ZONATOPO=Mouse Zone
  46.   If TASTODELTOPOPREMUTO=1
  47.    If DENTROZONA=False
  48.     If ZONATOPO=1
  49. 'Suona il campione 
  50.      Inverse On : Print At(0,ULTIMALINEA-3);"Suona"
  51.      Proc SUONA
  52.     End If 
  53.     If ZONATOPO=2
  54. 'Ferma la riproduzione del campione  
  55.      Inverse On : Print At(0,ULTIMALINEA-2);"Ferma"
  56.      Sam Stop 
  57.     End If 
  58.     If ZONATOPO=3
  59. 'Attiva o disattiva la riproduzione all'infinito del campione  
  60.      CICLO= Not CICLO : Proc CICLO
  61.     End If 
  62.     If ZONATOPO=4
  63. 'Attiva o disattiva il filtro audio  
  64.      FILTRO= Not FILTRO : Proc FILTRO
  65.     End If 
  66.     If ZONATOPO=5
  67. 'Mostra tutto il campione  
  68.      Inverse On : Print At(19,ULTIMALINEA-2);"Tutto"
  69.      NUOVOINIZIOCAMPIONE=Start(BANCO)
  70.      NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  71.      LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  72.      LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  73.      Proc MOSTRACAMPIONE
  74.      INIZIO=True : Proc INIZIO
  75.      POSIZIONESLIDER=0
  76.      Proc SLIDERINGRANDIMENTO
  77.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  78.     End If 
  79.     If ZONATOPO=6
  80. 'Mostra una porzione del campione compresa tra tra le due linee verdi  
  81.      Inverse On : Print At(26,ULTIMALINEA-2);"Tra le linee"
  82.      Proc MOSTRACAMPIONE
  83.      INIZIO=True : Proc INIZIO
  84.      POSIZIONESLIDER=0
  85.      Proc SLIDERINGRANDIMENTO
  86.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  87.     End If 
  88.     If ZONATOPO=7
  89. 'Mostra l'inizio del campione ed attiva la linea verde marcatrice d'inizio 
  90. ' come marcatore corrente  
  91.      INIZIO=True : Proc INIZIO
  92.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  93.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  94.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  95.     End If 
  96.     If ZONATOPO=8
  97. 'Mostra la fine del campione ed attiva la linea verde marcatrice della fine
  98. ' come marcatore corrente
  99.      INIZIO=False : Proc INIZIO
  100.      POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  101.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  102.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  103.     End If 
  104.     If ZONATOPO=9
  105. 'Cerca lo zero all'indietro nel campione a partire dalla linea verde 
  106. ' marcatrice corrente  
  107.      Inverse On : Print At(51,ULTIMALINEA-2);"<Indietro"
  108.      If INIZIO=True
  109.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,False] : NUOVOINIZIOCAMPIONE=Param
  110.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  111.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  112.      Else 
  113.       Proc CERCALOZERO[NUOVAFINECAMPIONE,False] : NUOVAFINECAMPIONE=Param
  114.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  115.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  116.      End If 
  117.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  118.      Proc SLIDERINGRANDIMENTO
  119.      Proc LINEE : Proc INGRANDISCI
  120.     End If 
  121.     If ZONATOPO=10
  122. 'Cerca lo zero avanti nel campione a partire dalla linea verde marcatrice
  123. ' corrente 
  124.      Inverse On : Print At(61,ULTIMALINEA-2);"Avanti>"
  125.      If INIZIO=True
  126.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,True] : NUOVOINIZIOCAMPIONE=Param
  127.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  128.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  129.      Else 
  130.       Proc CERCALOZERO[NUOVAFINECAMPIONE,True] : NUOVAFINECAMPIONE=Param
  131.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  132.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  133.      End If 
  134.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  135.      Proc SLIDERINGRANDIMENTO
  136.      Proc LINEE : Proc INGRANDISCI
  137.     End If 
  138.     If ZONATOPO=11
  139. 'Carica un campione
  140.      Inverse On : Print At(69,ULTIMALINEA-3);"Carica" : Inverse Off 
  141.      Proc CARICAUNFILE
  142.      Exit If SENZAMEMORIA=True,2
  143.      If Exist(FILE$)
  144.       Proc CARICARAWOIFF
  145.       Proc CONDIZIONEINIZIALE
  146.      End If 
  147.     End If 
  148.     If ZONATOPO=12
  149. 'Attiva la zona di ingrandimento o,se questa era gi� attiva, sposta la linea 
  150. ' verde marcatrice corrente nella posizione indicata dal puntatore del mouse 
  151.      If ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  152.       Proc TIC[Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento di un Byte",ULTIMALINEA]
  153.       If INIZIO=True
  154.        NUOVOINIZIOCAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  155.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  156.       Else 
  157.        NUOVAFINECAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  158.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  159.       End If 
  160.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  161.       Proc SLIDERINGRANDIMENTO
  162.       Proc LINEE : Proc INGRANDISCI
  163.      Else 
  164.       ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  165.       Proc MOSTRALAZONAATTIVA
  166.      End If 
  167.      NUOVOMESSAGGIO=True
  168.     End If 
  169.     If ZONATOPO=13
  170. 'Attiva la zona del campione o, se questa era gi� attiva, sposta la linea
  171. ' verde marcatrice corrente nella posizione indicata dal puntatore del mouse 
  172.      If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  173.       If INIZIO=True
  174.        NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  175.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  176.        POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  177.       Else 
  178.        NUOVAFINECAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  179.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  180.        POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-320
  181.       End If 
  182.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  183.       Proc SLIDERINGRANDIMENTO
  184.       Proc LINEE : Proc INGRANDISCI
  185.      Else 
  186.       ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  187.       Proc MOSTRALAZONAATTIVA
  188.      End If 
  189.     End If 
  190.     If ZONATOPO=14
  191. 'Genera un nuovo campione
  192.      Inverse On : Print At(6,ULTIMALINEA-2);"Genera" : Inverse Off 
  193.      Proc GENERACAMPIONE
  194.      GENERACAMPIONE=False
  195.      Proc CONDIZIONEINIZIALE
  196.     End If 
  197.     If ZONATOPO=15
  198. 'Salva il campione come RAW od IFF 
  199.      Inverse On : Print At(69,ULTIMALINEA-2);"Salva"
  200.      Proc SALVAUNFILE
  201.      Proc MESSAGGI
  202.     End If 
  203.     If ZONATOPO=16
  204. 'Esce dal programma
  205.      Exit 2
  206.     End If 
  207.     If ZONATOPO=18
  208. 'Reimposta la frequenza di riproduzione originale del campione 
  209.      Inverse On 
  210.      Print At(0,ULTIMALINEA-5);"Frequenza"
  211.      TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  212.      NUOVAFREQUENZA=FREQUENZA
  213.      Proc FREQUENZA
  214.      NUOVOMESSAGGIO=True
  215.     End If 
  216.     If ZONATOPO=19
  217. 'Porta la frequenza di riproduzione del campione avanti  
  218.      Inverse On 
  219.      Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  220.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  221.      Inc NUOVAFREQUENZA
  222.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  223.      Proc FREQUENZA
  224.      NUOVOMESSAGGIO=True
  225.     End If 
  226.     If ZONATOPO=20
  227. 'Porta la frequenza di riproduzione del campione indietro
  228.      Inverse On 
  229.      Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  230.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  231.      Dec NUOVAFREQUENZA
  232.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  233.      Proc FREQUENZA
  234.      NUOVOMESSAGGIO=True
  235.     End If 
  236.     If ZONATOPO=21
  237. 'Miscela due campioni con dissolvenza tra l'uno e l'altro
  238.      Inverse On : Print At(26,ULTIMALINEA-5);"MixTimbri" : Inverse Off 
  239.      Proc MISCELATIMBRI
  240.      GENERACAMPIONE=False
  241.      Proc CONDIZIONEINIZIALE
  242.     End If 
  243.     DENTROZONA=True
  244.    End If 
  245.    If ZONATOPO=17
  246. 'Attiva lo slider che permette di scegliere l'area ingrandita del campione 
  247. ' da vedere
  248.     POSIZIONESLIDER=X Screen(X Mouse)/DIVISIONESLIDERINGRANDIMENTO#
  249.     Proc SLIDERINGRANDIMENTO
  250.     POSIZIONEINGRANDIMENTO=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO-319
  251.     Proc INGRANDISCI
  252.    End If 
  253.   Else If TASTODELTOPOPREMUTO=2
  254.    If ZONATOPO=19
  255. 'Porta la frequenza di riproduzione del campione avanti velocemente
  256.     Inverse On 
  257.     Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  258.     Proc TIC["Tasto destro del mouse>incremento veloce",ULTIMALINEA]
  259.     Inc NUOVAFREQUENZA
  260.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  261.     Proc FREQUENZA
  262.     NUOVOMESSAGGIO=True
  263.    End If 
  264.    If ZONATOPO=20
  265. 'Porta la frequenza di riproduzione del campioneindietro velocemente 
  266.     Inverse On 
  267.     Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  268.     Proc TIC["Tasto destro del mouse>decremento veloce",ULTIMALINEA]
  269.     Dec NUOVAFREQUENZA
  270.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  271.     Proc FREQUENZA
  272.     NUOVOMESSAGGIO=True
  273.    End If 
  274.   Else 
  275.    Inverse Off 
  276.    Print At(0,ULTIMALINEA-3);"Suona"
  277.    Print At(0,ULTIMALINEA-2);"Ferma"
  278.    Print At(19,ULTIMALINEA-2);"Tutto"
  279.    Print At(26,ULTIMALINEA-2);"Tra le linee"
  280.    Print At(51,ULTIMALINEA-2);"<Indietro"
  281.    Print At(61,ULTIMALINEA-2);"Avanti>"
  282.    Print At(69,ULTIMALINEA-3);"Carica"
  283.    Print At(69,ULTIMALINEA-2);"Salva"
  284.    Print At(0,ULTIMALINEA-5);"Frequenza";Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  285.    Print At(26,ULTIMALINEA-5);"MixTimbri"
  286.    If NUOVOMESSAGGIO=True
  287.     Proc MESSAGGI
  288.     NUOVOMESSAGGIO=False
  289.    End If 
  290.    DENTROZONA=False
  291.   End If 
  292.   TASTOPREMUTO$=Inkey$
  293.  Until TASTOPREMUTO$<>""
  294.  If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  295.   If INIZIO=True
  296.    If TASTOPREMUTO$=Cright$
  297.     Add NUOVOINIZIOCAMPIONE,PASSO
  298.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  299.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  300.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  301.     Proc SLIDERINGRANDIMENTO
  302.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  303.    End If 
  304.    If TASTOPREMUTO$=Cleft$
  305.     Add NUOVOINIZIOCAMPIONE,-PASSO
  306.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  307.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  308.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  309.     Proc SLIDERINGRANDIMENTO
  310.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  311.    End If 
  312.   Else 
  313.    If TASTOPREMUTO$=Cright$
  314.     Add NUOVAFINECAMPIONE,PASSO
  315.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  316.     NUOVAFINECAMPIONE=Param : Proc LINEE
  317.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  318.     Proc SLIDERINGRANDIMENTO
  319.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  320.    End If 
  321.    If TASTOPREMUTO$=Cleft$
  322.     Add NUOVAFINECAMPIONE,-PASSO
  323.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  324.     NUOVAFINECAMPIONE=Param : Proc LINEE
  325.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  326.     Proc SLIDERINGRANDIMENTO
  327.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  328.    End If 
  329.   End If 
  330.  Else 
  331.   If INIZIO=True
  332.    If TASTOPREMUTO$=Cright$
  333.     If TASTODELTOPOPREMUTO=0
  334.      Add NUOVOINIZIOCAMPIONE,320
  335.     Else 
  336.      Inc NUOVOINIZIOCAMPIONE
  337.     End If 
  338.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  339.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  340.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  341.     Proc SLIDERINGRANDIMENTO
  342.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  343.    End If 
  344.    If TASTOPREMUTO$=Cleft$
  345.     If TASTODELTOPOPREMUTO=0
  346.      Add NUOVOINIZIOCAMPIONE,-320
  347.     Else 
  348.      Dec NUOVOINIZIOCAMPIONE
  349.     End If 
  350.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  351.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  352.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  353.     Proc SLIDERINGRANDIMENTO
  354.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  355.    End If 
  356.   Else 
  357.    If TASTOPREMUTO$=Cright$
  358.     If TASTODELTOPOPREMUTO=0
  359.      Add NUOVAFINECAMPIONE,320
  360.     Else 
  361.      Inc NUOVAFINECAMPIONE
  362.     End If 
  363.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  364.     NUOVAFINECAMPIONE=Param : Proc LINEE
  365.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  366.     Proc SLIDERINGRANDIMENTO
  367.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  368.    End If 
  369.    If TASTOPREMUTO$=Cleft$
  370.     If TASTODELTOPOPREMUTO=0
  371.      Add NUOVAFINECAMPIONE,-320
  372.     Else 
  373.      Dec NUOVAFINECAMPIONE
  374.     End If 
  375.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  376.     NUOVAFINECAMPIONE=Param : Proc LINEE
  377.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  378.     Proc SLIDERINGRANDIMENTO
  379.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  380.    End If 
  381.   End If 
  382.  End If 
  383.  If TASTOPREMUTO$=Cup$
  384.   ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  385.   Proc MOSTRALAZONAATTIVA
  386.  End If 
  387.  If TASTOPREMUTO$=Cdown$
  388.   ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  389.   Proc MOSTRALAZONAATTIVA
  390.  End If 
  391.  If TASTOPREMUTO$=" "
  392.   Inverse On : Print At(0,ULTIMALINEA-3),"Suona"
  393.   Proc SUONA
  394.  End If 
  395.  If TASTOPREMUTO$="c"
  396.  End If 
  397.  If TASTOPREMUTO$="s"
  398.  End If 
  399. Until TASTOPREMUTO$=Chr$(27)
  400. Inverse On : Print At(76,ULTIMALINEA-2);"Esci" : Wait 50
  401. Erase BANCO : Reserve Zone : Rainbow Del 0 : Screen Close 0 : End 
  402. Procedure ARCOBALENO
  403. Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  404. Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  405. Set Rainbow 0,1,16,"","",""
  406. For LINEA=0 To 15 : Read DATO : Rain(0,LINEA)=DATO : Next LINEA
  407. If Ntsc Then LUNGHEZZAARCOBALENO=223 Else LUNGHEZZAARCOBALENO=271
  408. Rainbow 0,2,0,LUNGHEZZAARCOBALENO
  409. End Proc
  410. Procedure AZZERAFORMADONDA
  411. Shared LUNGHEZZASINTETICO
  412. For A=0 To LUNGHEZZASINTETICO-1
  413.  F0RMADONDA(A)=0
  414. Next A
  415. End Proc
  416. Procedure CARICARAWOIFF
  417. INDIRIZZO=Start(BANCODIIO)+8
  418. If Peek$(INDIRIZZO,4)="8SVX"
  419.  Add INDIRIZZO,12
  420.  LUNGHEZZABANCO=Leek(INDIRIZZO)
  421.  If LUNGHEZZABANCO=0
  422.   Add INDIRIZZO,4
  423.   LUNGHEZZABANCO=Leek(INDIRIZZO)
  424.  Else 
  425.   Add INDIRIZZO,4
  426.  End If 
  427.  Add INDIRIZZO,8
  428.  FREQUENZA=Deek(INDIRIZZO)
  429.  Add INDIRIZZO,8
  430.  If Peek$(INDIRIZZO,4)="NAME"
  431.   Add INDIRIZZO,4
  432.   DATO=Leek(INDIRIZZO)
  433.   Add INDIRIZZO,4+DATO
  434.  End If 
  435.  If Peek$(INDIRIZZO,4)="ANNO"
  436.   Add INDIRIZZO,4
  437.   DATO=Leek(INDIRIZZO)
  438.   Add INDIRIZZO,4
  439.   ANNOTAZIONI$=Peek$(INDIRIZZO,DATO)-Chr$(0)
  440.   Add INDIRIZZO,DATO
  441.  End If 
  442.  If Peek$(INDIRIZZO,4)="BODY"
  443.   Add INDIRIZZO,4
  444.   LUNGHEZZADATI=Leek(INDIRIZZO)
  445.   Add INDIRIZZO,4
  446.   LUNGHEZZABANCO=Max(LUNGHEZZABANCO,LUNGHEZZADATI)
  447.   Reserve As Chip Work BANCO,LUNGHEZZABANCO
  448.   Copy INDIRIZZO,INDIRIZZO+LUNGHEZZABANCO-1 To Start(BANCO)
  449.  Else 
  450.   Proc TIC[FILE$+Str$(Length(BANCODIIO))+" Byte",ULTIMALINEA-1]
  451.   Proc TIC["� un IFF anomalo, non posso caricarlo!",ULTIMALINEA]
  452.   Wait 200
  453.   NOMEFILE$=""
  454.  End If 
  455. Else 
  456.  LUNGHEZZABANCO=Length(BANCODIIO)
  457.  Reserve As Chip Work BANCO,LUNGHEZZABANCO
  458.  Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO-1 To Start(BANCO)
  459.  FREQUENZA=8363
  460.  ANNOTAZIONI$=""
  461. End If 
  462. Erase BANCODIIO
  463. End Proc
  464. Procedure CARICAUNFILE
  465. Sam Loop Off : Sam Stop : CICLO=False
  466. FILE$=Fsel$("**","","Carica un campione audio","Premi Esc per uscire")
  467. If Exist(FILE$)
  468.  Open In 1,FILE$
  469.  LUNGHEZZABANCO=Max(Lof(1),512)
  470.  Close 1
  471.  MEMORIA=Chip Free+Fast Free
  472.  If LUNGHEZZABANCO>MEMORIA
  473.   Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  474.   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  475.   SENZAMEMORIA=True
  476.  Else 
  477.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  478.   Bload FILE$,Start(BANCODIIO)
  479.   SEPARATORE=Instr(FILE$,":") : POSIZIONE=1
  480.   For A=1 To Len(FILE$)
  481.    If Instr(FILE$,"/",POSIZIONE)>0
  482.     SEPARATORECASSETTO=Instr(FILE$,"/",POSIZIONE)
  483.     POSIZIONE=SEPARATORECASSETTO+1
  484.    End If 
  485.   Next A
  486.   SEPARATORE=Max(SEPARATORE,SEPARATORECASSETTO)
  487.   PERCORSO$=Left$(FILE$,SEPARATORE)
  488.   If Right$(PERCORSO$,1)="/"
  489.    PERCORSO$=Left$(PERCORSO$,Len(PERCORSO$)-1)
  490.   End If 
  491.   NOMEFILE$=Right$(FILE$,Len(FILE$)-SEPARATORE)
  492.   SENZAMEMORIA=False
  493.  End If 
  494. End If 
  495. End Proc
  496. Procedure CERCALOZERO[POSIZIONE,AVANTI]
  497. If AVANTI=True
  498.  Repeat 
  499.   Inc POSIZIONE
  500.   DATO=Peek(POSIZIONE)
  501.  Until DATO=0
  502. Else 
  503.  Repeat 
  504.   Dec POSIZIONE
  505.   DATO=Peek(POSIZIONE)
  506.  Until DATO=0
  507. End If 
  508. End Proc[POSIZIONE]
  509. Procedure CICLO
  510. If CICLO=True
  511.  Sam Loop On 
  512.  If GENERACAMPIONE=True
  513.   Inverse On : Print At(12,8);"Ciclo" : Inverse Off 
  514.  Else 
  515.   Inverse On : Print At(6,ULTIMALINEA-3);"Ciclo" : Inverse Off 
  516.  End If 
  517. Else 
  518.  Sam Loop Off 
  519.  If GENERACAMPIONE=True
  520.   Print At(12,8);"Ciclo"
  521.  Else 
  522.   Print At(6,ULTIMALINEA-3);"Ciclo"
  523.  End If 
  524. End If 
  525. End Proc
  526. Procedure CONDIZIONEINIZIALE
  527. INIZIO=True
  528. NUOVOINIZIOCAMPIONE=Start(BANCO)
  529. NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  530. LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  531. LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  532. NUOVAFREQUENZA=FREQUENZA
  533. Cls 
  534. Proc MOSTRACAMPIONE
  535. POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  536. Proc INGRANDISCI
  537. Proc SETTALEZONE
  538. Proc MESSAGGI
  539. Proc CICLO
  540. Proc FILTRO
  541. Proc FREQUENZA
  542. ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  543. Proc MOSTRALAZONAATTIVA
  544. Print At(0,ULTIMALINEA-4);"Sorgente>";ANNOTAZIONI$
  545. End Proc
  546. Procedure FILTRO
  547. If FILTRO=True
  548.  Led On 
  549.  If GENERACAMPIONE=True
  550.   Inverse On : Print At(18,8);"Filtro" : Inverse Off 
  551.  Else 
  552.   Inverse On : Print At(12,ULTIMALINEA-3);"Filtro" : Inverse Off 
  553.  End If 
  554. Else 
  555.  Led Off 
  556.  If GENERACAMPIONE=True
  557.   Print At(18,8);"Filtro"
  558.  Else 
  559.   Print At(12,ULTIMALINEA-3);"Filtro"
  560.  End If 
  561. End If 
  562. End Proc
  563. Procedure FREQUENZA
  564. If GENERACAMPIONE=True
  565.  Print At(39,8);Str$(NUOVAFREQUENZA)-" ";
  566. Else 
  567.  Print At(14,ULTIMALINEA-5);Str$(NUOVAFREQUENZA)-" ";
  568. End If 
  569. Print " Hertz "
  570. End Proc
  571. Procedure GENERACAMPIONE
  572. Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  573. NOMEFILE$="Sintetico"
  574. GENERACAMPIONE=True
  575. Cls 
  576. Proc TIC["Indica la lunghezza in multipli di 512 Byte (01-16)",ULTIMALINEA]
  577. RISPOSTA$=Input$(2) : RISPOSTA=Val(RISPOSTA$)
  578. Proc LIMITI[RISPOSTA,1,16] : RISPOSTA=Param
  579. LUNGHEZZASINTETICO=512*RISPOSTA
  580. Reserve Zone 21
  581. Ink 2 : Draw 0,31 To 511,31 : Draw 0,103 To 511,103 : Ink 1
  582. Set Zone 1,0,0 To 511,63
  583. Print At(0,8);Zone$("Suona",2)
  584. Print At(6,8);Zone$("Ferma",3)
  585. Print At(12,8);Zone$("Ciclo",4)
  586. Print At(18,8);Zone$("Filtro",5)
  587. Set Zone 6,0,72 To 511,135
  588. Print At(0,18);Zone$("Suona",7)
  589. Print At(6,18);"Forme d'onda:"
  590. Print At(6,19);Zone$("Sinusoidale",8)
  591. Print At(6,20);Zone$("Triangolare",9)
  592. Print At(6,21);Zone$("Dente di sega",10)
  593. Print At(6,22);Zone$("Quadra",11)
  594. Print At(6,23);Zone$("Disegno",12)
  595. Print At(20,18);"Operazioni:"
  596. Print At(20,19);Zone$("Somma",13)
  597. Print At(20,20);Zone$("Sottrai",14)
  598. Print At(20,21);Zone$("Inverti",15)
  599. Print At(20,22);Zone$("Rovescia",16)
  600. Print At(76,17); Using "####";1
  601. Hslider 0,136 To 607,143,128,0,1
  602. Set Zone 17,0,136 To 607,143
  603. Print At(25,8);Zone$("Frequenza",18);
  604. Print Zone$(Chr$(147)+Chr$(148),19);
  605. Print Zone$(Chr$(149)+Chr$(150),20);
  606. Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  607. Print At(20,23);Zone$("Progressione",21)
  608. Proc CICLO
  609. Proc FILTRO
  610. Reserve As Chip Work BANCO,LUNGHEZZASINTETICO
  611. Reserve As Chip Work BANCO4,LUNGHEZZASINTETICO
  612. FREQUENZAMASSIMA=LUNGHEZZASINTETICO/4
  613. LUNGHEZZA$=Str$(LUNGHEZZASINTETICO)+" Byte"
  614. Print At(80-Len(LUNGHEZZA$),8);LUNGHEZZA$
  615. Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  616. Repeat 
  617.  Repeat 
  618.   TASTOPREMUTO$=Inkey$
  619.   TASTODELTOPOPREMUTO=Mouse Key
  620.   ZONATOPO=Mouse Zone
  621.   If TASTODELTOPOPREMUTO=1
  622.    If DENTROZONA=False
  623.     If ZONATOPO=2
  624.      Inverse On : Print At(0,8);"Suona"
  625.      Sam Raw 1,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  626.      Sam Raw 2,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  627.     End If 
  628.      If ZONATOPO=3
  629.       Inverse On : Print At(6,8);"Ferma"
  630.       Sam Stop 
  631.      End If 
  632.      If ZONATOPO=4
  633.       CICLO= Not CICLO : Proc CICLO
  634.      End If 
  635.      If ZONATOPO=5
  636.       FILTRO= Not FILTRO : Proc FILTRO
  637.      End If 
  638.     If ZONATOPO=7
  639.      Inverse On : Print At(0,18);"Suona"
  640.      Sam Raw 4,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  641.      Sam Raw 8,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  642.     End If 
  643.     If ZONATOPO=8
  644.      Inverse On : Print At(6,19);"Sinusoidale"
  645.      Cls 0,0,72 To 639+1,135+1
  646.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  647.      UNITA#=2*Pi#/LUNGHEZZASINTETICO
  648.      For X=0 To LUNGHEZZASINTETICO-1
  649.       DATO=Sin(UNITA#*X)*127
  650.       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  651.       If DATO<0
  652.        Add DATO,256
  653.       End If 
  654.       INDIRIZZO=Start(BANCO4)+X
  655.       Poke INDIRIZZO,DATO
  656.      Next X
  657.      If MULTIPLO#>1
  658.       Proc MULTIPLO
  659.      End If 
  660.     End If 
  661.     If ZONATOPO=9
  662.      Inverse On : Print At(6,20);"Triangolare"
  663.      Cls 0,0,72 To 639+1,135+1
  664.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  665.      For X=0 To LUNGHEZZASINTETICO-1
  666.       If X<LUNGHEZZASINTETICO/4
  667.        DATO=(X*512)/LUNGHEZZASINTETICO
  668.       End If 
  669.       If X>LUNGHEZZASINTETICO/4-1 and X<LUNGHEZZASINTETICO/4*3
  670.        DATO=((LUNGHEZZASINTETICO/2-X)*512)/LUNGHEZZASINTETICO-1
  671.       End If 
  672.       If X>LUNGHEZZASINTETICO/4*3-1
  673.        DATO=((X-LUNGHEZZASINTETICO)*512)/LUNGHEZZASINTETICO
  674.       End If 
  675.       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  676.       If DATO<0
  677.        Add DATO,256
  678.       End If 
  679.       INDIRIZZO=Start(BANCO4)+X
  680.       Poke INDIRIZZO,DATO
  681.      Next X
  682.      If MULTIPLO#>1
  683.       Proc MULTIPLO
  684.      End If 
  685.     End If 
  686.     If ZONATOPO=10
  687.      Inverse On : Print At(6,21);"Dente di sega"
  688.      Cls 0,0,72 To 639+1,135+1
  689.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  690.      For X=0 To LUNGHEZZASINTETICO-1
  691.       DATO=((X/2-LUNGHEZZASINTETICO/4)*512)/LUNGHEZZASINTETICO
  692.       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  693.       If DATO<0
  694.        Add DATO,256
  695.       End If 
  696.       INDIRIZZO=Start(BANCO4)+X
  697.       Poke INDIRIZZO,DATO
  698.      Next X
  699.      If MULTIPLO#>1
  700.       Proc MULTIPLO
  701.      End If 
  702.     End If 
  703.     If ZONATOPO=11
  704.      Inverse On : Print At(6,22);"Quadra"
  705.      Cls 0,0,72 To 639+1,135+1
  706.      Ink 2 : Draw 0,103 To 511,103 : Ink 1 : Gr Locate 0,103
  707.      For X=0 To LUNGHEZZASINTETICO-1
  708.       If X<LUNGHEZZASINTETICO/2
  709.        DATO=127
  710.       Else 
  711.        DATO=-128
  712.       End If 
  713.       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  714.       If DATO<0
  715.        Add DATO,256
  716.       End If 
  717.       INDIRIZZO=Start(BANCO4)+X
  718.       Poke INDIRIZZO,DATO
  719.      Next X
  720.      If MULTIPLO#>1
  721.       Proc MULTIPLO
  722.      End If 
  723.     End If 
  724.     If ZONATOPO=12
  725.      Inverse On : Print At(6,23);"Disegno"
  726.      Proc TIC["Premi il tasto destro del mouse per finire",ULTIMALINEA]
  727.      Repeat 
  728.       TASTODELTOPOPREMUTO=Mouse Key
  729.       ZONATOPO=Mouse Zone
  730.       If TASTODELTOPOPREMUTO=1 and ZONATOPO=6
  731.        XTOPO=X Screen(X Mouse) : YTOPO=Y Screen(Y Mouse)
  732.        Ink 0 : Box XTOPO,72 To XTOPO+1,135
  733.        Ink 2 : Draw XTOPO,103 To XTOPO+1,103
  734.        Ink 1 : Draw XTOPO,YTOPO To XTOPO+1,YTOPO
  735.        DATO=(103-YTOPO)*4
  736.        If DATO<0
  737.         Add DATO,256
  738.        End If 
  739.        INDIRIZZO=Start(BANCO4)+XTOPO*LUNGHEZZASINTETICO/512
  740.        For A=0 To LUNGHEZZASINTETICO/512
  741.         Poke INDIRIZZO+A,DATO
  742.        Next A
  743.       End If 
  744.      Until TASTODELTOPOPREMUTO=2
  745.      Cls 0,0,72 To 639+1,135+1
  746.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  747.      Gr Locate 0,103
  748.      For X=0 To LUNGHEZZASINTETICO-1 Step LUNGHEZZASINTETICO/512
  749.       DATO=Peek(Start(BANCO4)+X)
  750.       If DATO>127
  751.        Add DATO,-256
  752.       End If 
  753.       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  754.      Next X
  755.      NUOVOMESSAGGIO=True
  756.     End If 
  757.     If ZONATOPO=13
  758.      Inverse On : Print At(20,19);"Somma"
  759.      Proc SOMMA
  760.      Proc MOSTRASINTETICO
  761.     End If 
  762.     If ZONATOPO=14
  763.      Inverse On : Print At(20,20);"Sottrai"
  764.      For X=0 To LUNGHEZZASINTETICO-1
  765.       DATO=Peek(Start(BANCO4)+X)
  766.       If DATO>127
  767.        Add DATO,-256
  768.       End If 
  769.       Add F0RMADONDA(X),-DATO
  770.      Next X
  771.      Proc MOSTRASINTETICO
  772.     End If 
  773.     If ZONATOPO=15
  774.      Inverse On : Print At(20,21);"Inverti"
  775.      Cls 0,0,72 To 639+1,135+1
  776.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  777.      Gr Locate 0,103
  778.      For X=0 To LUNGHEZZASINTETICO-1
  779.       DATO=Peek(Start(BANCO4)+X)
  780.       If DATO>127
  781.        Add DATO,-256
  782.       End If 
  783.       DATO= Not DATO
  784.       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  785.       If DATO<0
  786.        Add DATO,256
  787.       End If 
  788.       INDIRIZZO=Start(BANCO4)+X
  789.       Poke INDIRIZZO,DATO
  790.      Next X
  791.     End If 
  792.     If ZONATOPO=16
  793.      Inverse On : Print At(20,22);"Rovescia"
  794.      Cls 0,0,72 To 639+1,135+1
  795.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  796.      Reserve As Work BANCO3,LUNGHEZZASINTETICO
  797.      For X=0 To LUNGHEZZASINTETICO-1
  798.       DATO=Peek(Start(BANCO4)+X)
  799.       INDIRIZZO=Start(BANCO3)+LUNGHEZZASINTETICO-1-X
  800.       Poke INDIRIZZO,DATO
  801.       If DATO>127
  802.        Add DATO,-256
  803.       End If 
  804.       Polyline To((LUNGHEZZASINTETICO-1-X)*512)/LUNGHEZZASINTETICO,103-DATO/4
  805.      Next X
  806.      Copy Start(BANCO3),Start(BANCO3)+Length(BANCO3)-1 To Start(BANCO4)
  807.      Erase BANCO3
  808.     End If 
  809.     If ZONATOPO=18
  810.      Inverse On : Print At(25,8);"Frequenza"
  811.      Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  812.      NUOVAFREQUENZA=FREQUENZA
  813.      Proc FREQUENZA
  814.      NUOVOMESSAGGIO=True
  815.     End If 
  816.     If ZONATOPO=19
  817.      Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  818.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  819.      Inc NUOVAFREQUENZA
  820.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  821.      Proc FREQUENZA
  822.      NUOVOMESSAGGIO=True
  823.     End If 
  824.     If ZONATOPO=20
  825.      Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  826.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  827.      Dec NUOVAFREQUENZA
  828.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  829.      Proc FREQUENZA
  830.      NUOVOMESSAGGIO=True
  831.     End If 
  832.     If ZONATOPO=21
  833.      Inverse On : Print At(20,23);"Progressione"
  834.      Proc TIC["Progressione aritmetica o geometrica (a/g Esc->Esci)?",ULTIMALINEA]
  835.      RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  836.      If RISPOSTA$<>Chr$(27)
  837.       If RISPOSTA$="a"
  838.        PROGRESSIONE$="Aritmetica"
  839.       End If 
  840.       If RISPOSTA$="g"
  841.        PROGRESSIONE$="Geometrica"
  842.       End If 
  843.       If PROGRESSIONE$<>""
  844.        Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
  845.        Input "Inizio della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+")?";RISPOSTA$;
  846.        If RISPOSTA$<>""
  847.         PRIMOTERMINE=Val(RISPOSTA$)
  848.         Proc LIMITI[PRIMOTERMINE,1,FREQUENZAMASSIMA] : PRIMOTERMINE=Param
  849.         Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
  850.         Input "Fine della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+")?";RISPOSTA$;
  851.         If RISPOSTA$<>""
  852.          ULTIMOTERMINE=Val(RISPOSTA$)
  853.          Proc LIMITI[ULTIMOTERMINE,1,FREQUENZAMASSIMA] : ULTIMOTERMINE=Param
  854.          Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
  855.          Input "Numero di valori intermedi (1-126)?";RISPOSTA$; : Curs Off 
  856.          If RISPOSTA$<>""
  857.           VLORIINTERMEDI=Val(RISPOSTA$) : VLORITOTALI=VLORIINTERMEDI+2
  858.           Proc LIMITI[VLORITOTALI,3,128] : VLORITOTALI=Param
  859.           If PROGRESSIONE$="Aritmetica"
  860.            RAGIONE#=(ULTIMOTERMINE-PRIMOTERMINE)/(VLORITOTALI-1*1.0)
  861.            For A=1 To VLORITOTALI
  862.             If A=VLORITOTALI
  863.              MULTIPLO#=ULTIMOTERMINE
  864.             Else 
  865.              MULTIPLO#=RAGIONE#*(A-1)+PRIMOTERMINE
  866.             End If 
  867.             Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  868.             Proc MULTIPLO
  869.             Cls 0,0,72 To 639+1,135+1
  870.             Ink 2 : Draw 0,103 To 511,103 : Ink 1
  871.             Proc SOMMA
  872.            Next A
  873.            For A=0 To LUNGHEZZASINTETICO-1 Step 4
  874.             Loke Start(BANCO4)+A,0
  875.            Next A
  876.            Proc MOSTRASINTETICO
  877.           End If 
  878.           If PROGRESSIONE$="Geometrica"
  879.            RAGIONE#=(ULTIMOTERMINE/PRIMOTERMINE)^(1.0/(VLORITOTALI-1))
  880.            For A=1 To VLORITOTALI
  881.             If A=VLORITOTALI
  882.              MULTIPLO#=ULTIMOTERMINE
  883.             Else 
  884.              MULTIPLO#=RAGIONE#^(A-1)*PRIMOTERMINE
  885.             End If 
  886.             Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  887.             Proc MULTIPLO
  888.             Cls 0,0,72 To 639+1,135+1
  889.             Ink 2 : Draw 0,103 To 511,103 : Ink 1
  890.             Proc SOMMA
  891.            Next A
  892.            For A=0 To LUNGHEZZASINTETICO-1 Step 4
  893.             Loke Start(BANCO4)+A,0
  894.            Next A
  895.            Proc MOSTRASINTETICO
  896.           End If 
  897.          End If 
  898.         End If 
  899.        End If 
  900.       End If 
  901.      End If 
  902.      PROGRESSIONE$=""
  903.      NUOVOMESSAGGIO=True
  904.     End If 
  905.     DENTROZONA=True
  906.    End If 
  907.    If ZONATOPO=17
  908.     MULTIPLO#=X Screen(X Mouse)/(607.0/FREQUENZAMASSIMA)
  909.     Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1 : Wait Vbl 
  910.     MULTIPLO#=MULTIPLO#+1 : Print At(76,17); Using "####";MULTIPLO#
  911.    End If 
  912.   Else If TASTODELTOPOPREMUTO=2
  913.    If ZONATOPO=19
  914.     Inverse On 
  915.     Print At(34,8);Chr$(147)+Chr$(148)
  916.     Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  917.     Inc NUOVAFREQUENZA
  918.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  919.     Proc FREQUENZA
  920.     NUOVOMESSAGGIO=True
  921.    End If 
  922.    If ZONATOPO=20
  923.     Inverse On 
  924.     Print At(36,8);Chr$(149)+Chr$(150)
  925.     Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  926.     Dec NUOVAFREQUENZA
  927.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  928.     Proc FREQUENZA
  929.     NUOVOMESSAGGIO=True
  930.    End If 
  931.   Else 
  932.    Inverse Off 
  933.    Print At(0,8);"Suona"
  934.    Print At(6,8);"Ferma"
  935.    Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  936.    Print At(0,18);"Suona"
  937.    Print At(6,19);"Sinusoidale"
  938.    Print At(6,20);"Triangolare"
  939.    Print At(6,21);"Dente di sega"
  940.    Print At(6,22);"Quadra"
  941.    Print At(6,23);"Disegno"
  942.    Print At(20,19);"Somma"
  943.    Print At(20,20);"Sottrai"
  944.    Print At(20,21);"Inverti"
  945.    Print At(20,22);"Rovescia"
  946.    Print At(20,23);"Progressione"
  947.    If NUOVOMESSAGGIO=True
  948.     Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  949.     NUOVOMESSAGGIO=False
  950.    End If 
  951.    DENTROZONA=False
  952.   End If 
  953.  Until TASTOPREMUTO$<>""
  954. Until TASTOPREMUTO$=Chr$(27)
  955. Erase BANCO4
  956. Proc AZZERAFORMADONDA
  957. End Proc
  958. Procedure INGRANDISCI
  959. Cls 0,0,72 To 639+1,72+ALTEZZA+1
  960. Ink 2 : Draw 0,72+ZERO To 639,72+ZERO : Ink 1
  961. Clip 0,72 To 639,72+ALTEZZA
  962. Gr Locate 0,72+ZERO
  963. For X=0 To 639
  964.  POSIZIONE=POSIZIONEINGRANDIMENTO+X
  965.  DATO=Peek(POSIZIONE)
  966.  If DATO>127
  967.   Add DATO,-256
  968.  End If 
  969.  If POSIZIONE>=Start(BANCO) and POSIZIONE<=Start(BANCO)+Length(BANCO)-1
  970.   If POSIZIONE=Start(BANCO)+Length(BANCO)-1
  971.    Polyline X,72+ZERO-DATO To X,72+ZERO
  972.   Else 
  973.    Polyline To X,72+ZERO-DATO : Y=Ygr
  974.   End If 
  975.  Else 
  976.   Gr Locate X+1,72+ZERO
  977.  End If 
  978.  If POSIZIONE=NUOVOINIZIOCAMPIONE
  979.   Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  980.   Gr Writing 1 : Gr Locate X,Y
  981.  End If 
  982.  If POSIZIONE=NUOVAFINECAMPIONE
  983.   Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  984.   Draw X+3,72 To X+7,72
  985.   Draw X+3,74 To X+7,74
  986.   Draw X+3,72 To X+3,76
  987.   Gr Writing 1 : Gr Locate X,Y
  988.  End If 
  989. Next X
  990. Clip 
  991. End Proc
  992. Procedure INIZIO
  993. If INIZIO=True
  994.  Inverse On : Print At(39,ULTIMALINEA-2);"Inizio" : Inverse Off 
  995.  Print At(46,ULTIMALINEA-2);"Fine"
  996. Else 
  997.  Print At(39,ULTIMALINEA-2);"Inizio"
  998.  Inverse On : Print At(46,ULTIMALINEA-2);"Fine" : Inverse Off 
  999. End If 
  1000. End Proc
  1001. Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
  1002. '-> Limiti by Stefano Regattin 
  1003. 'i> 19 maggio 1996 
  1004. 'm> 12 giugno 1996 
  1005. '--------------------------------------------------------
  1006. 'La procedura equivale alle seguenti linee di programma: 
  1007. ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
  1008. ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
  1009. 'Se LIMITEMINIMO ï¿½ maggiore di LIMITEMASSIMO ne scambia i valori 
  1010. '----------------------------------------------------------------  
  1011. If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
  1012. NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
  1013. End Proc[NUMERO]
  1014. Procedure LINEE
  1015. NUOVOINIZIOCAMPIONE=Min(NUOVOINIZIOCAMPIONE,NUOVAFINECAMPIONE-511)
  1016. If NUOVOINIZIOCAMPIONE<INIZIOCAMPIONE
  1017.  NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE
  1018.  NUOVAFINECAMPIONE=NUOVOINIZIOCAMPIONE+511
  1019. End If 
  1020. NUOVAFINECAMPIONE=Max(NUOVAFINECAMPIONE,NUOVOINIZIOCAMPIONE+511)
  1021. Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1022. XLINEAINIZIOCAMPIONE=(NUOVOINIZIOCAMPIONE-INIZIOCAMPIONE)/PASSO
  1023. Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1024. Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
  1025. XLINEAFINECAMPIONE=(NUOVAFINECAMPIONE-INIZIOCAMPIONE)/PASSO
  1026. Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  1027. Inverse Off : Print At(0,8);"Inizio>Byte";NUOVOINIZIOCAMPIONE-Start(BANCO);
  1028. Print " Fine>Byte";NUOVAFINECAMPIONE-Start(BANCO);
  1029. LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  1030. LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  1031. Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  1032. End Proc
  1033. Procedure MESSAGGI
  1034. Proc TIC[NOMEFILE$+Str$(Length(BANCO))+" Byte",ULTIMALINEA-1]
  1035. Proc TIC[Chr$(147)+Chr$(148)+" "+Chr$(149)+Chr$(150)+" zona attiva "+Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento Esc Esci",ULTIMALINEA]
  1036. End Proc
  1037. Procedure MISCELATIMBRI
  1038. Sam Loop Off : Sam Stop : CICLO=False
  1039. Cls 
  1040. FILE$=Fsel$("**","","Carica il primo campione audio","Premi Esc per uscire")
  1041. If FILE$="" Then Pop Proc
  1042. If Exist(FILE$)
  1043.  Open In 1,FILE$
  1044.  LUNGHEZZABANCO=Max(Lof(1),512)
  1045.  Close 1
  1046.  MEMORIA=Chip Free+Fast Free
  1047.  If LUNGHEZZABANCO>MEMORIA
  1048.   Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  1049.   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  1050.   SENZAMEMORIA=True
  1051.  Else 
  1052.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1053.   Bload FILE$,Start(BANCODIIO)
  1054.   SENZAMEMORIA=False
  1055.   Proc CARICARAWOIFF
  1056.   LUNGHEZZABANCO1=LUNGHEZZABANCO
  1057.   Reserve As Chip Work BANCO3,LUNGHEZZABANCO1
  1058.   Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO3)
  1059.  End If 
  1060. End If 
  1061. FILE$=Fsel$("**","","Carica il secondo campione audio","Premi Esc per uscire")
  1062. If FILE$="" Then Pop Proc
  1063. If Exist(FILE$)
  1064.  Open In 1,FILE$
  1065.  LUNGHEZZABANCO=Max(Lof(1),512)
  1066.  Close 1
  1067.  MEMORIA=Chip Free+Fast Free
  1068.  If LUNGHEZZABANCO>MEMORIA
  1069.   Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  1070.   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  1071.   SENZAMEMORIA=True
  1072.  Else 
  1073.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1074.   Bload FILE$,Start(BANCODIIO)
  1075.   SENZAMEMORIA=False
  1076.   Proc CARICARAWOIFF
  1077.   LUNGHEZZABANCO2=LUNGHEZZABANCO
  1078.   Reserve As Chip Work BANCO4,LUNGHEZZABANCO2
  1079.   Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO4)
  1080.  End If 
  1081. End If 
  1082. LUNGHEZZABANCO=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1083. If LUNGHEZZABANCO1=0 or LUNGHEZZABANCO2=0
  1084.  Proc TIC["Devi scegliere due campioni audio!",ULTIMALINEA]
  1085.  Wait 200 : Pop Proc
  1086. End If 
  1087. If SENZAMEMORIA=True Then Pop Proc
  1088. Reserve As Chip Work BANCO,LUNGHEZZABANCO
  1089. GENERACAMPIONE=True
  1090. Reserve Zone 8
  1091. MOSTRACAMPIONEPERMISCELAZIONE[BANCO3,0]
  1092. MOSTRACAMPIONEPERMISCELAZIONE[BANCO4,72]
  1093. Print At(0,8);Zone$("Suona",1)
  1094. Print At(6,8);Zone$("Ferma",2)
  1095. Print At(12,8);Zone$("Ciclo",3)
  1096. Print At(51,8);"Lunghezza>";Str$(Length(BANCO3))-" ";" Byte"
  1097. Print At(18,8);Zone$("Filtro",4)
  1098. Print At(0,17);Zone$("Suona",5)
  1099. Print At(6,17);"Lunghezza>";Str$(Length(BANCO4))-" ";" Byte"
  1100. Print At(25,8);Zone$("Frequenza",6);
  1101. Print Zone$(Chr$(147)+Chr$(148),7);
  1102. Print Zone$(Chr$(149)+Chr$(150),8);
  1103. Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  1104. Proc CICLO
  1105. Proc FILTRO
  1106. Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1107. Repeat 
  1108.  Repeat 
  1109.   TASTOPREMUTO$=Inkey$
  1110.   TASTODELTOPOPREMUTO=Mouse Key
  1111.   ZONATOPO=Mouse Zone
  1112.   If TASTODELTOPOPREMUTO=1
  1113.    If DENTROZONA=False
  1114.     If ZONATOPO=1
  1115.      Inverse On : Print At(0,8);"Suona"
  1116.      Sam Raw 1,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1117.      Sam Raw 2,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1118.     End If 
  1119.      If ZONATOPO=2
  1120.       Inverse On : Print At(6,8);"Ferma"
  1121.       Sam Stop 
  1122.      End If 
  1123.      If ZONATOPO=3
  1124.       CICLO= Not CICLO : Proc CICLO
  1125.      End If 
  1126.      If ZONATOPO=4
  1127.       FILTRO= Not FILTRO : Proc FILTRO
  1128.      End If 
  1129.     If ZONATOPO=5
  1130.      Inverse On : Print At(0,17);"Suona"
  1131.      Sam Raw 4,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  1132.      Sam Raw 8,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  1133.     End If 
  1134.     If ZONATOPO=6
  1135.      Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  1136.      NUOVAFREQUENZA=FREQUENZA
  1137.      Proc FREQUENZA
  1138.      NUOVOMESSAGGIO=True
  1139.     End If 
  1140.     If ZONATOPO=7
  1141.      Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  1142.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  1143.      Inc NUOVAFREQUENZA
  1144.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1145.      Proc FREQUENZA
  1146.      NUOVOMESSAGGIO=True
  1147.     End If 
  1148.     If ZONATOPO=8
  1149.      Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  1150.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  1151.      Dec NUOVAFREQUENZA
  1152.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1153.      Proc FREQUENZA
  1154.      NUOVOMESSAGGIO=True
  1155.     End If 
  1156.     DENTROZONA=True
  1157.    End If 
  1158.   Else If TASTODELTOPOPREMUTO=2
  1159.    If ZONATOPO=7
  1160.     Inverse On 
  1161.     Print At(34,8);Chr$(147)+Chr$(148)
  1162.     Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  1163.     Inc NUOVAFREQUENZA
  1164.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1165.     Proc FREQUENZA
  1166.     NUOVOMESSAGGIO=True
  1167.    End If 
  1168.    If ZONATOPO=8
  1169.     Inverse On 
  1170.     Print At(36,8);Chr$(149)+Chr$(150)
  1171.     Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  1172.     Dec NUOVAFREQUENZA
  1173.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1174.     Proc FREQUENZA
  1175.     NUOVOMESSAGGIO=True
  1176.    End If 
  1177.   Else 
  1178.    Inverse Off 
  1179.    Print At(0,8);"Suona"
  1180.    Print At(6,8);"Ferma"
  1181.    Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  1182.    Print At(0,17);"Suona"
  1183.    If NUOVOMESSAGGIO=True
  1184.     Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1185.     NUOVOMESSAGGIO=False
  1186.    End If 
  1187.    DENTROZONA=False
  1188.   End If 
  1189.  Until TASTOPREMUTO$<>""
  1190.  If TASTOPREMUTO$=Chr$(27) Then Pop Proc
  1191. Until TASTOPREMUTO$=" "
  1192. Proc TIC["Vuoi la dissolvenza da un campione all'altro (s/n)?",ULTIMALINEA]
  1193. RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  1194. If RISPOSTA$<>"s" and RISPOSTA$<>"n" Then Pop Proc
  1195. If RISPOSTA$="s"
  1196.  If LUNGHEZZABANCO1>LUNGHEZZABANCO2
  1197.   SCELTA=1
  1198.  Else If LUNGHEZZABANCO1=LUNGHEZZABANCO2
  1199.   Repeat 
  1200.    Proc TIC["I 2 campioni sono lunghi uguali; quale scegli come campione di partenza (1/2)?",ULTIMALINEA]
  1201.    SCELTA$=Input$(1) : SCELTA=Val(SCELTA$)
  1202.   Until SCELTA=1 or SCELTA=2
  1203.  Else 
  1204.   SCELTA=2
  1205.  End If 
  1206.  Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  1207.  LUNGHEZZAMISCELAZIONE=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1208.  For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
  1209.   VLOREPERCENTUALE=(INDIRIZZO*100)/(LUNGHEZZAMISCELAZIONE-1)
  1210.   DATO1=Peek(Start(BANCO3)+INDIRIZZO)
  1211.   If DATO1>127
  1212.    Add DATO1,-256
  1213.   End If 
  1214.   DATO2=Peek(Start(BANCO4)+INDIRIZZO)
  1215.   If DATO2>127
  1216.    Add DATO2,-256
  1217.   End If 
  1218.   If SCELTA=1
  1219.    DATO1=(DATO1*VLOREPERCENTUALE)/100
  1220.    If INDIRIZZO<=LUNGHEZZABANCO2
  1221.     DATO2=(DATO2*(100-VLOREPERCENTUALE))/100
  1222.    Else 
  1223.     DATO2=0
  1224.    End If 
  1225.   Else 
  1226.    If INDIRIZZO<=LUNGHEZZABANCO1
  1227.     DATO1=(DATO1*(100-VLOREPERCENTUALE))/100
  1228.    Else 
  1229.     DATO1=0
  1230.    End If 
  1231.    DATO2=(DATO2*VLOREPERCENTUALE)/100
  1232.   End If 
  1233.   DATOMISCELAZIONE=(DATO1+DATO2)/2
  1234.   If DATOMISCELAZIONE<0
  1235.    Add DATOMISCELAZIONE,256
  1236.   End If 
  1237.   Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
  1238.   XBARRAPROGRESSO=(80*INDIRIZZO)/(LUNGHEZZAMISCELAZIONE-1)
  1239.   Inverse On : Print At(XBARRAPROGRESSO,ULTIMALINEA-1);" "; : Inverse Off 
  1240.  Next INDIRIZZO
  1241. End If 
  1242. If RISPOSTA$="n"
  1243.  Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  1244.  LUNGHEZZAMISCELAZIONE=Min(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1245.  For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
  1246.   DATO1=Peek(Start(BANCO3)+INDIRIZZO)
  1247.   DATO2=Peek(Start(BANCO4)+INDIRIZZO)
  1248.   If DATO1>127
  1249.    Add DATO1,-256
  1250.   End If 
  1251.   If DATO2>127
  1252.    Add DATO2,-256
  1253.   End If 
  1254.   DATOMISCELAZIONE=(DATO1+DATO2)/2
  1255.    If DATOMISCELAZIONE<0
  1256.    Add DATOMISCELAZIONE,256
  1257.   End If 
  1258.   Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
  1259.   XBARRAPROGRESSO=(80*INDIRIZZO)/(LUNGHEZZAMISCELAZIONE-1)
  1260.   Inverse On : Print At(XBARRAPROGRESSO,ULTIMALINEA-1);" "; : Inverse Off 
  1261.  Next INDIRIZZO
  1262. End If 
  1263. ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
  1264. End Proc
  1265. Procedure MOSTRACAMPIONE
  1266. INIZIOCAMPIONE=NUOVOINIZIOCAMPIONE : FINECAMPIONE=NUOVAFINECAMPIONE
  1267. PASSO=(FINECAMPIONE-INIZIOCAMPIONE+1)/640+1 : PASSO=Max(PASSO,1)
  1268. Cls 0,0,0 To 639+1,63+1 : Ink 2 : Draw 0,31 To 639,31 : Gr Locate 0,31 : Ink 1
  1269. For INDIRIZZO=INIZIOCAMPIONE To FINECAMPIONE Step PASSO
  1270.  DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1271.  Polyline To X,31-DATO/4 : Inc X
  1272. Next INDIRIZZO
  1273. XLINEAINIZIOCAMPIONE=0 : XLINEAFINECAMPIONE=X-1
  1274. Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1275. Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  1276. Inverse Off : Print At(0,8);"Inizio>Byte";INIZIOCAMPIONE-Start(BANCO);
  1277. Print " Fine>Byte";FINECAMPIONE-Start(BANCO);
  1278. Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  1279. DIVISIONESLIDERINGRANDIMENTO#=640.0/PASSO
  1280. End Proc
  1281. Procedure MOSTRACAMPIONEPERMISCELAZIONE[B,P]
  1282. IC=Start(B) : FC=Start(B)+Length(B)-1
  1283. PASSO=(FC-IC+1)/640+1 : PASSO=Max(PASSO,1)
  1284. Ink 2 : Draw 0,P+31 To 639,P+31 : Gr Locate 0,P+31 : Ink 1
  1285. For INDIRIZZO=IC To FC Step PASSO
  1286.  DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1287.  Polyline To X,P+31-DATO/4 : Inc X
  1288. Next INDIRIZZO
  1289. End Proc
  1290. Procedure MOSTRASINTETICO
  1291. Shared LUNGHEZZASINTETICO
  1292. Cls 0,0,0 To 511+1,63+1
  1293. Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1294. Gr Locate 0,31 : DIVISORE=1
  1295. For X=0 To LUNGHEZZASINTETICO-1
  1296.  DATO=F0RMADONDA(X)/DIVISORE
  1297.  If DATO>127 or DATO<-128
  1298.   Cls 0,0,0 To 511+1,63+1
  1299.   Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1300.   Gr Locate 0,31 : Inc DIVISORE : X=-1
  1301.  End If 
  1302.  If X>-1
  1303.   Polyline To(X*512)/LUNGHEZZASINTETICO,31-DATO/4
  1304.   If DATO<0
  1305.    Add DATO,256
  1306.   End If 
  1307.   Poke Start(BANCO)+X,DATO
  1308.  End If 
  1309. Next X
  1310. End Proc
  1311. Procedure MOSTRALAZONAATTIVA
  1312. Print At(65,8);ZONAATTIVA$
  1313. End Proc
  1314. Procedure MULTIPLO
  1315. Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  1316. Reserve As Work BANCO3,LUNGHEZZASINTETICO
  1317. Repeat 
  1318.  For X=0 To LUNGHEZZASINTETICO-1 Step MULTIPLO#
  1319.   DATO=Peek(Start(BANCO4)+X)
  1320.   INDIRIZZO=Start(BANCO3)+M
  1321.   Poke INDIRIZZO,DATO : Inc M : Exit If M=LUNGHEZZASINTETICO
  1322.  Next X
  1323. Until M=LUNGHEZZASINTETICO
  1324. Gr Locate 0,103
  1325. For X=0 To LUNGHEZZASINTETICO-1
  1326.  DATO=Peek(Start(BANCO3)+X)
  1327.  INDIRIZZO=Start(BANCO4)+X
  1328.  Poke INDIRIZZO,DATO
  1329.  If DATO>127
  1330.   Add DATO,-256
  1331.  End If 
  1332.  Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  1333. Next X
  1334. Erase BANCO3
  1335. Inverse Off 
  1336. Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1
  1337. Print At(76,17); Using "####";MULTIPLO#
  1338. End Proc
  1339. Procedure SALVAUNFILE
  1340. Sam Loop Off : Sam Stop : CICLO=False
  1341. FILE$=Fsel$("**",NOMEFILE$,"Salva un campione audio","Premi Esc per uscire")
  1342. If FILE$<>""
  1343.  TIC["Vuoi salvarlo come file IFF (s/n) ?",ULTIMALINEA]
  1344.  RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  1345.  If RISPOSTA$="s"
  1346.   Proc TIC["Sto salvando il campione audio IFF",ULTIMALINEA-1]
  1347.   Proc TIC[FILE$,ULTIMALINEA]
  1348.   LUNGHEZZANOME=Len(NOMEFILE$)/4*4
  1349.   RESTONOME=Len(NOMEFILE$) mod 4
  1350.   If RESTONOME>0
  1351.   Add LUNGHEZZANOME,4
  1352.   End If 
  1353.   LUNGHEZZAANNO=36
  1354.   LUNGHEZZABANCO=40+8+LUNGHEZZAANNO+8+LUNGHEZZACAMPIONE
  1355.   If NOMEFILE$<>""
  1356.    Add LUNGHEZZABANCO,8+LUNGHEZZANOME
  1357.   End If 
  1358.   LUNGHEZZABANCOPARI=LUNGHEZZABANCO mod 2
  1359.   If LUNGHEZZABANCOPARI=1
  1360.    Inc LUNGHEZZABANCO
  1361.   End If 
  1362.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1363.   INDIRIZZO=Start(BANCODIIO)
  1364.   Poke$ INDIRIZZO,"FORM"
  1365.   Add INDIRIZZO,4
  1366.   Loke INDIRIZZO,LUNGHEZZABANCO-8
  1367.   Add INDIRIZZO,4
  1368.   Poke$ INDIRIZZO,"8SVXVHDR"
  1369.   Add INDIRIZZO,8
  1370.   Loke INDIRIZZO,20
  1371.   Add INDIRIZZO,4
  1372.   Loke INDIRIZZO,0
  1373.   Add INDIRIZZO,4
  1374.   Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1375.   Add INDIRIZZO,4
  1376.   Loke INDIRIZZO,0
  1377.   Add INDIRIZZO,4
  1378.   Doke INDIRIZZO,NUOVAFREQUENZA
  1379.   Add INDIRIZZO,2
  1380.   Doke INDIRIZZO,256
  1381.   Add INDIRIZZO,2
  1382.   Doke INDIRIZZO,256
  1383.   Add INDIRIZZO,2
  1384.   Doke INDIRIZZO,0
  1385.   Add INDIRIZZO,2
  1386.   If NOMEFILE$<>""
  1387.    Poke$ INDIRIZZO,"NAME"
  1388.    Add INDIRIZZO,4
  1389.    Loke INDIRIZZO,LUNGHEZZANOME
  1390.    Add INDIRIZZO,4
  1391.    Poke$ INDIRIZZO,NOMEFILE$
  1392.    Add INDIRIZZO,Len(NOMEFILE$)
  1393.    If RESTONOME>0
  1394.     ZERINELNOME=4-RESTONOME
  1395.     Inverse On 
  1396.     For A=1 To ZERINELNOME
  1397.      Poke INDIRIZZO,0
  1398.      Inc INDIRIZZO
  1399.     Next A
  1400.    End If 
  1401.   End If 
  1402.   Poke$ INDIRIZZO,"ANNO"
  1403.   Add INDIRIZZO,4
  1404.   Loke INDIRIZZO,LUNGHEZZAANNO
  1405.   Add INDIRIZZO,4
  1406.   Poke$ INDIRIZZO,"SamplesMaster by Stefano Regattin"+String$(Chr$(0),3)
  1407.   Add INDIRIZZO,LUNGHEZZAANNO
  1408.   Poke$ INDIRIZZO,"BODY"
  1409.   Add INDIRIZZO,4
  1410.   Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1411.   Add INDIRIZZO,4
  1412.   Copy INIZIOCAMPIONE,FINECAMPIONE To INDIRIZZO
  1413.   Add INDIRIZZO,LUNGHEZZACAMPIONE+LUNGHEZZABANCOPARI
  1414.   If INDIRIZZO=Start(BANCODIIO)+Length(BANCODIIO)
  1415.    Proc TIC["Conversione campione audio da RAW ad IFF avvenuta",ULTIMALINEA]
  1416.   Else 
  1417.    Proc TIC["Conversione campione audio da RAW ad IFF fallita!",ULTIMALINEA]
  1418.    Erase BANCODIIO
  1419.    Wait 200
  1420.    Pop Proc
  1421.   End If 
  1422.   Bsave FILE$,Start(BANCODIIO) To Start(BANCODIIO)+Length(BANCODIIO)
  1423.   Erase BANCODIIO
  1424.  Else 
  1425.   Proc TIC["Sto salvando il campione audio RAW",ULTIMALINEA-1]
  1426.   Proc TIC[FILE$,ULTIMALINEA]
  1427.   Bsave FILE$,INIZIOCAMPIONE To FINECAMPIONE+1
  1428.  End If 
  1429.  Wait 200
  1430. End If 
  1431. End Proc
  1432. Procedure SETTALEZONE
  1433. Reserve Zone 21
  1434. Print At(0,ULTIMALINEA-3);Zone$("Suona",1)
  1435. Print At(0,ULTIMALINEA-2);Zone$("Ferma",2)
  1436. Print At(6,ULTIMALINEA-3);Zone$("Ciclo",3)
  1437. Print At(12,ULTIMALINEA-3);Zone$("Filtro",4)
  1438. Print At(21,ULTIMALINEA-3);"Mostra campione"
  1439. Print At(19,ULTIMALINEA-2);Zone$("Tutto",5)
  1440. Print At(26,ULTIMALINEA-2);Zone$("Tra le linee",6)
  1441. Print At(40,ULTIMALINEA-3);"Posizione"
  1442. Inverse On : Print At(39,ULTIMALINEA-2);Zone$("Inizio",7) : Inverse Off 
  1443. Print At(46,ULTIMALINEA-2);Zone$("Fine",8)
  1444. Print At(53,ULTIMALINEA-3);"Cerca lo zero"
  1445. Print At(51,ULTIMALINEA-2);Zone$("<Indietro",9)
  1446. Print At(61,ULTIMALINEA-2);Zone$("Avanti>",10)
  1447. Print At(69,ULTIMALINEA-3);Zone$("Carica",11)
  1448. Set Zone 12,0,72 To 639,72+ALTEZZA
  1449. Set Zone 13,0,0 To 639,63
  1450. Print At(6,ULTIMALINEA-2);Zone$("Genera",14)
  1451. Print At(69,ULTIMALINEA-2);Zone$("Salva",15)
  1452. Print At(76,ULTIMALINEA-2);Zone$("Esci",16)
  1453. Set Zone 17,0,72+ALTEZZA+1 To 639,72+ALTEZZA+1+7
  1454. YSLIDERINGRANDIMENTO=72+ALTEZZA+1
  1455. Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,0,1
  1456. Print At(0,ULTIMALINEA-5);Zone$("Frequenza",18);
  1457. Print Zone$(Chr$(147)+Chr$(148),19);
  1458. Print Zone$(Chr$(149)+Chr$(150),20);
  1459. Print ">"
  1460. Print At(26,ULTIMALINEA-5);Zone$("MixTimbri",21)
  1461. End Proc
  1462. Procedure SETTASCHERMO
  1463. If Ntsc Then LUNGHEZZASCHERMO=200 Else LUNGHEZZASCHERMO=256
  1464. If Ntsc Then RIDUZIONE=4 Else RIDUZIONE=2
  1465. ALTEZZA=256/RIDUZIONE-1 : ZERO=128/RIDUZIONE-1
  1466. ULTIMALINEA=LUNGHEZZASCHERMO/8-1
  1467. Screen Open 0,640,LUNGHEZZASCHERMO,4,Hires : Curs Off : Flash Off 
  1468. Palette $60,$CCC,$C00,$C0 : Pen 1 : Paper 0 : Cls : Curs Pen 1
  1469. Wait Vbl : Limit Mouse 
  1470. End Proc
  1471. Procedure SLIDERINGRANDIMENTO
  1472. Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,POSIZIONESLIDER,1
  1473. End Proc
  1474. Procedure SOMMA
  1475. Shared LUNGHEZZASINTETICO
  1476. For X=0 To LUNGHEZZASINTETICO-1
  1477.  DATO=Peek(Start(BANCO4)+X)
  1478.  If DATO>127
  1479.   Add DATO,-256
  1480.  End If 
  1481.  Add F0RMADONDA(X),DATO
  1482. Next X
  1483. End Proc
  1484. Procedure SUONA
  1485. Sam Raw 1,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1486. Sam Raw 2,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1487. End Proc
  1488. Procedure TIC[TESTO$,LINEA]
  1489. '-> Testo Invertito e Centrato by Stefano Regattin 
  1490. 'i> 23 maggio 1996 
  1491. 'm> 25 maggio 1996 
  1492. '--------------------------------------------------------------------------- 
  1493. 'LINEA contiene il numero di linea dove si posizioner� il testo; se vale -1
  1494. ' (True) il testo sar� posizionato alla linea dove si trova il cursore; in 
  1495. ' questo caso sar� necessario un comando PRINT per spostare il cursore 
  1496. '----------------------------------------------------------------------
  1497. If LINEA=True Then L=Y Curs Else L=LINEA
  1498. Locate 0,L : Inverse On : Cline : Centre TESTO$ : Inverse Off 
  1499. End Proc